home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-23 | 2.0 KB | 79 lines | [TEXT/????] |
- SYSTEM fractal;
- CONST maxlevel = 7;
- (* specification of binary tree-structure *)
- CONFIGURATION tree [1..2**maxlevel -1];
- CONNECTION son_l : tree[i] -> tree[2*i].father;
- son_r : tree[i] -> tree[2*i+1].father;
- father: tree[i] -> {EVEN(i)} tree[i DIV 2].son_l,
- {ODD(i)} tree[i DIV 2].son_r;
- SCALAR i,j : INTEGER;
- delta : REAL;
- field : ARRAY [1..2**maxlevel-1] OF REAL;
- VECTOR x, low, high: REAL;
-
- PROCEDURE Gauss(): VECTOR REAL;
- (* random number with Gaussian distribution *)
- CONST N = 4;
- A = MAX(INTEGER);
- GA= (3.0*FLOAT(N))**0.5;
- GF= 2.0*GA / (FLOAT(N)*FLOAT(A));
- SCALAR i : INTEGER;
- VECTOR sum: REAL;
- BEGIN
- sum:=0.0;
- FOR i:=1 TO N DO sum:= sum + FLOAT(VIRandom()) END;
- RETURN (GF*sum - GA)
- END Gauss;
-
- PROCEDURE inorder(SCALAR node: INTEGER);
- CONST maxnode = 2 ** maxlevel -1;
- BEGIN
- IF node <= maxnode THEN
- inorder(2*node);
- WriteFixPt(field[node], 10,3);
- WriteLn;
- inorder(2*node+1);
- END
- END inorder;
-
- PROCEDURE MidPointRec(SCALAR delta: REAL; SCALAR level: INTEGER);
- SCALAR min, max, max2 : INTEGER;
- BEGIN
- (* select tree-level: 2^(level-1) <= id_no <= 2^level - 1 *)
- min := 2**(level-1);
- max := 2 * min - 1;
- max2:= 2 * max + 1;
-
- PARALLEL
- IF min <= id_no <= max THEN
- x := 0.5 * (low + high) + delta*Gauss();
- END;
-
- (* select the current and the next tree-level for data propagation *)
- IF min <= id_no <= max2 THEN
- (* new values for low and high at right and left son, respectively *)
- PROPAGATE.son_l(low);
- PROPAGATE.son_r(high);
- PROPAGATE.son_l(x);
- PROPAGATE.son_r(x);
- IF EVEN(id_no) THEN high:=x ELSE low:=x END;
- END
- ENDPARALLEL
- END MidPointRec;
-
-
- BEGIN (* main *)
- PARALLEL (* [1] *) (* only the root is active *)
- low := 0.0; (* starting value *)
- high := 1.0;
- x := 0.0;
- ENDPARALLEL;
- FOR i:=1 TO maxlevel DO
- delta := 0.5 ** (FLOAT(i+1)/2.0);
- MidPointRec(delta,i);
- END; (* for *)
- STORE(x,field);
- inorder(1);
- END fractal.
-
-